Role-Based Access Control(下简称rbac) 以角色为基础的访问控制模型,通过角色连接用户和权限,达到两者解耦的目的
rbac中有三种类型:用户、角色、权限,分别解释一下各自的作用
- 用户:使用系统的个体,一般是自然人,通过操作系统达到一定目的
- 权限:系统中每一个模块的操作,curd,的使用许可证明
- 角色:用户和权限之间的桥梁,是一个抽象的概念,与用户或权限可以是一对多,一对一,多对一,多对多的关系,当用户操作某一个模块时,会先将用户名下的角色取出来和模块权限进行对比,如果满足条件即可操作,反之则不行
使用介绍
- 安装
go get github.com/ne7ermore/gRBAC
- 数据库配置 本项目使用的mongodb,如果没有安装mongo请先安装
go get gopkg.in/mgo.v2
数据库信息配置在 github.com/ne7ermore/gRBAC/common/const.go 中,可以根据自己实际情况修改,默认为:
var (
Addrs string = "127.0.0.1:27017"
Timeout int64 = 5
PoolLimit int = 1000
)
- 引入auth模块
import "github.com/ne7ermore/gRBAC/auth"
- 使用
func createPerm() {
p, err := auth.CreatePermisson("p1", "form1:abc:view")
if err != nil {
panic(err)
}
// handle p
}
func createRole() {
r, err := auth.CreateRole("role1")
if err != nil {
panic(err)
}
// add permission
if _, err := auth.Assign(r.Id.Hex(), p.Id.Hex()); err != nil {
panic(err)
}
}
func createUser() {
u, err := auth.CreateUser("use1")
if err != nil {
panic(err)
}
// add role
if _, err := auth.AddRole(u.Id.Hex(), r.Id.Hex()); err != nil {
panic(err)
}
}
所有API
Function | Description |
---|---|
CreatePermisson | Create a new permisson |
GetPerm | get permission by id |
UpdatePerm | update permission by id |
CreateRole | Create a new role |
GetRole | Get role by id |
Assign | Assign a permission to a role |
Revoke | Revoke a permission from the role |
CreateUser | Create a new user |
GetUser | Get one user by mongid |
GetUserByUid | Get one user by Uid |
AddRole | Add one role to a user |
DelRole | Delete one role from the user |
IsPrmitted | A user has a permission or not |
GetAllPerms | Get all permissions |
GetAllRoles | Get all roles |
GetAllUsers | Get all users |
作者